package modelo.dao;

import java.util.List;

import modelo.bean.BeanGenerica;

import org.hibernate.Criteria;

import execao.RegistroNaoEncontradoException;
import utilitarios.SessaoFactory;

public abstract class DAOGenerico<T extends BeanGenerica>{
	
	public void inserir(T objeto) throws Exception{
		SessaoFactory.getSession().save(objeto);
	}
	
	public void alterar(T objeto) throws Exception{
		SessaoFactory.getSession().update(objeto);
	}
	
	public void excluir(T objeto) throws Exception{
		SessaoFactory.getSession().delete(objeto);
	}

	@SuppressWarnings("unchecked")
	public List<T> pesquisarTodos(Class<T> classe) throws Exception{
	
		List<T> lista = null;
		Criteria criteria = SessaoFactory.getSession().createCriteria(classe); 
		lista = criteria.list();
	
		if(lista.size() == 0) {
			throw new RegistroNaoEncontradoException();
		}
		
		return lista;
	}
	
	@SuppressWarnings("unchecked")
	public T pesquisarPorId(Class<T> classe, int id) throws Exception{
		
		T objeto = null;
		objeto = (T) SessaoFactory.getSession().load(classe, id);
	
		return objeto;
	}
	
}